package com.hua.api.core.framework.config;

import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.config.WxMaConfig;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Slf4j
@Configuration
@EnableConfigurationProperties()
public class WxMaConfiguration {

    @Value("${wechat.appId}")
    public String appId;
    @Value("${wechat.secret}")
    public String secret;
    // 商户号
    @Value("${wechat.mchId}")
    public String mchId;
    // 证书路径
    @Value("${wechat.keyPath}")
    public String keyPath;
    // 证书私钥
    @Value("${wechat.privateKeyPath}")
    private String privateKeyPath;

    // 私钥 pem
    @Value("${wechat.privateCertPath}")
    private String privateCertPath;

    // 支付回调
    @Value("${wechat.notifyUrl}")
    private String notifyUrl;
    // 退款回调
    @Value("${wechat.refundNotifyUrl}")
    private String refundNotifyUrl;

    // 证书序列号
    @Value("${wechat.serialNo}")
    private String serialNo;
    // apiV3秘钥
    @Value("${wechat.apiV3Key}")
    private String apiV3Key;

    public void a(){
     //   WxMaOrderShippingService wxMaOrderShippingService =new WxMaOrderShippingServiceImpl();
    }


    @Bean
    public WxMaService wxMaService() {
        log.info("微信服务初始化 wxMaService");
        log.info("appId={}",appId);
        log.info("secret={}",secret);
        log.info("mchId={}",mchId);
        log.info("keyPath={}",keyPath);
        log.info("privateKeyPath={}",privateKeyPath);
        log.info("privateCertPath={}",privateCertPath);
        log.info("notifyUrl={}",notifyUrl);
        log.info("refundNotifyUrl={}",refundNotifyUrl);
        log.info("serialNo={}",serialNo);
        log.info("apiV3Key={}",apiV3Key);


        WxMaService wxMaService = new WxMaServiceImpl();
        Map<String,WxMaConfig> configMap = new HashMap<>();
        WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
        config.setAppid(appId);
        config.setSecret(secret);
        config.setToken(""); // 微信小程序消息服务器配置的token
        config.setAesKey(""); // 微信小程序消息服务器配置的EncodingAESKey
        config.setMsgDataFormat("JSON");
        configMap.put(appId,config);
        wxMaService.setMultiConfigs(configMap);


        return wxMaService;
    }

    @Bean
    public WxPayService wxPayService() {
        log.info("微信支付服务初始化 WxPayService");
        WxPayConfig payConfig = new WxPayConfig();
        payConfig.setAppId(appId); // 设置微信公众号或者小程序等的appid
        payConfig.setMchId(mchId); // 微信支付商户号
        // payConfig.setMchKey(WeChatConstant.mchKey); // 微信支付商户密钥
        // payConfig.setSubAppId(SUB_APP_ID);  // 服务商模式下的子商户公众账号ID，普通模式请不要配置，请在配置文件中将对应项删除
        // payConfig.setSubMchId(SUB_MCH_ID);  // 服务商模式下的子商户号，普通模式请不要配置，最好是请在配置文件中将对应项删除
        payConfig.setKeyPath(keyPath); // apiclient_cert.p12文件的绝对路径，或者如果放在项目中，请以classpath:开头指定
        payConfig.setNotifyUrl(notifyUrl);

        // v3支付需要配置
        payConfig.setPrivateKeyPath(privateKeyPath);
        payConfig.setPrivateCertPath(privateCertPath);
        payConfig.setApiV3Key(apiV3Key); // v3秘钥

        // 可以指定是否使用沙箱环境
        payConfig.setUseSandboxEnv(false);

        WxPayService wxPayService = new WxPayServiceImpl();
        wxPayService.setConfig(payConfig);
        return wxPayService;
    }


}
